
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;                               syscall.asm
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;                                                     Forrest Yu, 2005
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

%include "sconst.inc"

_NR_get_ticks       equ 0 ; 要跟 global.c 中 sys_call_table 的定义相对应！
_NR_print_str		equ 1 ; sys_print_str的系统调用在sys_call_table中的序号
_NR_print_str_color equ 2 ; sys_print_str_color的系统调用在sys_call_table中的序号
_NR_sleep			equ 3 ; sys_sleep的系统调用在sys_call_table中的序号
_NR_time_delay		equ 4 ; milli_delay的系统调用在sys_call_table中的序号
_NR_p_operation			equ 5 ; sys_p_operation的系统调用在sys_call_table中的序号
_NR_v_operation			equ 6 ; sys_v_operation的系统调用在sys_call_table中的序号

INT_VECTOR_SYS_CALL equ 0x90

; 导出符号
global	get_ticks
global 	print_str
global	sleep
global	time_delay
global	p_operation
global	v_operation

bits 32
[section .text]

; ====================================================================
;                              get_ticks
; ====================================================================
get_ticks:
	push ebx
	mov	eax, _NR_get_ticks
	int	INT_VECTOR_SYS_CALL
	pop ebx
	ret

print_str:
	push ebx
	mov eax, _NR_print_str
	mov ebx, [esp+8]	;将传入的参数写入ebx中，在sys_call中压入栈中，传给实际执行的函数
	int INT_VECTOR_SYS_CALL
	pop ebx
	ret

print_str_color:
	push ebx
	mov eax, _NR_print_str_color
	mov ebx, [esp+8]	;将传入的参数写入ebx中，在sys_call中压入栈中，传给实际执行的函数
	int INT_VECTOR_SYS_CALL
	pop ebx
	ret

sleep:
	push ebx
	mov eax, _NR_sleep
	mov ebx, [esp+8]	;将传入的参数写入ebx中，在sys_call中压入栈中，传给实际执行的函数
	int INT_VECTOR_SYS_CALL
	pop ebx
	ret
	
time_delay:
	push ebx
	mov eax, _NR_time_delay
	mov ebx, [esp+8]	;将传入的参数写入ebx中，在sys_call中压入栈中，传给实际执行的函数
	int INT_VECTOR_SYS_CALL
	pop ebx
	ret
	
p_operation:
	push ebx
	mov eax, _NR_p_operation
	mov ebx, [esp+8]	;将传入的参数写入ebx中，在sys_call中压入栈中，传给实际执行的函数
	int INT_VECTOR_SYS_CALL
	pop ebx
	ret
	
v_operation:
	push ebx
	mov eax, _NR_v_operation
	mov ebx, [esp+8];将传入的参数写入ebx中，在sys_call中压入栈中，传给实际执行的函数
	int INT_VECTOR_SYS_CALL
	pop ebx
	ret